const jsdom = require("jsdom");
const {JSDOM} = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
window = dom.window;
document = window.document;
XMLHttpRequest = window.XMLHttpRequest;
navigator = {
    userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
}

function td_collect_exe() {
    _fingerprint_step = 8;
    var v = td_collect.collect();
    td_collect.collectSdk();
    var y = "string" == typeof orderId ? orderId : ""
        , x = "undefined" != typeof jdfp_pinenp_ext && jdfp_pinenp_ext ? 2 : 1;
    y = {
        pin: _jdJrTdCommonsObtainPin(x),
        oid: y,
        p: "https:" == document.location.protocol ? "s" : "h",
        fp: risk_jd_local_fingerprint,
        ctype: x,
        v: "2.7.10.4",
        f: "3"
    };
    try {
        y.o = _CurrentPageUrl,
            y.qs = _url_query_str
    } catch (z) {}
    _fingerprint_step = 9;
    0 >= _JdEid.length && 0 < (_JdEid = td_collect.obtainLocal()).length && (_eidFlag = !0);
    y.fc = _JdEid;
    try {
        y.t = jd_risk_token_id
    } catch (z) {}
    try {
        if ("undefined" != typeof gia_fp_qd_uuid && 0 <= gia_fp_qd_uuid.length)
            y.qi = gia_fp_qd_uuid;
        else {
            var A = _JdJrRiskClientStorage.jdtdstorage_cookie("qd_uid");
            y.qi = void 0 == A ? "" : A
        }
    } catch (z) {}
    void 0 !== jd_shadow__ && 0 < jd_shadow__.length && (y.jtb = jd_shadow__);
    try {
        td_collect.deviceInfo && void 0 != td_collect.deviceInfo && null != td_collect.deviceInfo.sdkToken && "" != td_collect.deviceInfo.sdkToken ? (y.stk = td_collect.deviceInfo.sdkToken,
            td_collect.isRpTok = !0) : td_collect.isRpTok = !1
    } catch (z) {
        td_collect.isRpTok = !1
    }
    A = td_collect.tdencrypt(y);
    _fingerprint_step = "a";
    jdJrTdsendCorsRequest(_CurrentPageProtocol + _JdJrTdRiskDomainName + "/fcf.html?a=" + A, "d=" + v, function(z) {
        _fingerprint_step = "e";
        var C = z;
        0 < z.indexOf("*_*") && (C = z.split("*_*", 2),
            z = JSON.parse(C[1]),
            C = z.eid,
            _jd_e_joint_ = function(g) {
                try {
                    if (g && null != g) {
                        var f = JDDSecCryptoJS.channel.Downlink;
                        g.sim && null != g.sim && (g.im = f.deBase32(g.sim));
                        g.sma && null != g.sma && (g.ma = f.deBase32(g.sma))
                    }
                } catch (m) {}
                return g
            }(z));
        if (32 < C.length && 91 >= C.length) {
            var F = 0 < C.indexOf("jd_risk_");
            F || (_JdEid = C);
            _eidFlag = !0;
            z = new Date;
            z.setFullYear(z.getFullYear() + 1E3);
            (function(g, f) {
                    _fingerprint_step = "f";
                    try {
                        _jdJrTdRelationEidPin(f),
                            _fingerprint_step = "g",
                        F || (td_collect.setCookie(g, f),
                            _fingerprint_step = "h")
                    } catch (m) {}
                    try {
                        window.localStorage && (window.localStorage.setItem(g, f),
                            _fingerprint_step = "i")
                    } catch (m) {}
                    try {
                        window.sessionStorage && (window.sessionStorage.setItem(g, f),
                            _fingerprint_step = "j")
                    } catch (m) {}
                    try {
                        window.globalStorage && (window.globalStorage[".localdomain"].setItem(g, f),
                            _fingerprint_step = "k")
                    } catch (m) {}
                    try {
                        td_collect.db(g, _JdEid)
                    } catch (m) {}
                }
            )("3AB9D23F7A4B3C9B", C)
        }
    }, !1)
}
function getJdEid() {
    var v = {
        eid: _JdEid = !_JdEid || 120 < _JdEid.length ? "" : _JdEid,
        fp: risk_jd_local_fingerprint,
        sdkToken: ""
    }
        , y = "";
    try {
        "" == _JdEid && (y = "a",
            v.eid = td_collect.obtainLocal(!0),
            y = "b"),
            v.token = jd_risk_token_id,
            v.jstub = jd_shadow__
    } catch (A) {} finally {
        td_collect.deviceInfo.eid = v.eid,
            td_collect.deviceInfo.fp = v.fp
    }
    void 0 !== v.eid && "" != v.eid || (v.fpstep = _fingerprint_step + y + "" + start_time);
    try {
        if (v.sdkToken = td_collect.deviceInfo.sdkToken,
        null != td_collect.deviceInfo && void 0 != td_collect.deviceInfo && !td_collect.isRpTok && null != td_collect.deviceInfo.sdkToken && "" != td_collect.deviceInfo.sdkToken) {
            var x = td_collect.tdencrypt({
                fc: v.eid,
                stk: td_collect.deviceInfo.sdkToken
            });
            td_collect.reportWorker(_CurrentPageProtocol + _JdJrTdRiskDomainName + "/ek.html", "a=" + x);
            td_collect.isRpTok = !0
        }
    } catch (A) {}
    return v
}
function getEidJoint() {
    var v = void 0;
    try {
        void 0 == _jd_e_joint_ ? v = getJdEid() : (_jd_e_joint_.fp = risk_jd_local_fingerprint,
            _jd_e_joint_.token = jd_risk_token_id,
            v = _jd_e_joint_)
    } catch (y) {}
    return v
}
function jdJrTdsendCorsRequest(v, y, x, A) {
    try {
        _fingerprint_step = "b";
        try {
            var z = new window.XMLHttpRequest
        } catch (C) {}
        if (!z)
            try {
                z = new window.ActiveXObject("Microsoft.XMLHTTP")
            } catch (C) {}
        if (!z)
            try {
                z = new window.ActiveXObject("Msxml2.XMLHTTP")
            } catch (C) {}
        if (!z)
            try {
                z = new window.ActiveXObject("Msxml3.XMLHTTP")
            } catch (C) {}
        _fingerprint_step = "c";
        z.open("POST", v, !0);
        z.timeout = 1500;
        z.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
        z.onreadystatechange = function() {
            4 === z.readyState && 200 === z.status && x && x(z.responseText)
        }
        ;
        z.send(y);
        _fingerprint_step = "d"
    } catch (C) {}
}
function JdJrTdFingerDataStream(v, y, x) {
    if (void 0 === v || 0 == v)
        throw Error("sourceCode can not be null.");
    if (void 0 === y && (y = 1),
    void 0 === x && (x = 15),
    0 >= _JdEid.length && y < x)
        setTimeout(function() {
            JdJrTdFingerDataStream(v, y, x)
        }, 20 * y),
            y++;
    else if ("undefined" != typeof jd_risk_token_id && 0 < _JdEid.length && 0 < risk_jd_local_fingerprint.length) {
        var A = _jdJrTdCommonsObtainPin("undefined" != typeof jdfp_pinenp_ext && jdfp_pinenp_ext ? 2 : 1);
        0 < A.length && (A = {
            p: A,
            fp: risk_jd_local_fingerprint,
            e: _JdEid,
            ct: (new Date).getTime(),
            t: jd_risk_token_id,
            opt: v
        },
            jdJrTdsendCorsRequest(_CurrentPageProtocol + _JdJrTdRiskDomainName + "/stream.html", "c=" + td_collect.tdencrypt(A)))
    }
}
function _jdJrTdRelationEidPin(v) {
    try {
        if (32 <= v.length) {
            var y = _jdJrTdCommonsObtainPin("undefined" != typeof jdfp_pinenp_ext && jdfp_pinenp_ext ? 2 : 1);
            if (0 < y.length) {
                v = {
                    o: _CurrentPageUrl,
                    p: y,
                    e: v,
                    f: risk_jd_local_fingerprint
                };
                try {
                    v.bizId = _jdtdparam.bizId,
                        v.pvId = _jdtdparam.pvId,
                        v.uvId = _jdtdparam.uvId
                } catch (A) {}
                var x = td_collect.tdencrypt(v);
                jdJrTdsendCorsRequest(_CurrentPageProtocol + _JdJrTdRiskDomainName + "/r.html?v=" + Math.random(), "&d=" + x)
            }
        }
    } catch (A) {}
}
function _jdJrTdCommonsObtainPin(v) {
    var y = "";
    return "string" == typeof jd_jr_td_risk_pin && 1 == v ? y = jd_jr_td_risk_pin : "string" == typeof pin ? y = pin : "object" == typeof pin && "string" == typeof jd_jr_td_risk_pin && (y = jd_jr_td_risk_pin),
        y
}
var start_time = (new Date).getTime(), _jdfp_canvas_md5 = "", _jdfp_webgl_md5 = "", _fingerprint_step = 1, _JdEid = "", _eidFlag = !1, risk_jd_local_fingerprint = "", _jd_e_joint_;
!function(v, y, x) {
    "undefined" != typeof module && module.exports ? module.exports = x() : y.JdJrTdRiskFinger = x()
}(0, this, function() {
    function v(b) {
        if (null == b || void 0 == b || "" == b)
            var a = "NA";
        else {
            if (null == b || void 0 == b || "" == b)
                a = "";
            else {
                a = [];
                for (var c = (1 << f) - 1, t = 0; t < b.length * f; t += f)
                    a[t >> 5] |= (b.charCodeAt(t / f) & c) << t % 32
            }
            b = b.length * f;
            a[b >> 5] |= 128 << b % 32;
            a[14 + (b + 64 >>> 9 << 4)] = b;
            b = 1732584193;
            c = -271733879;
            t = -1732584194;
            for (var n = 271733878, q = 0; q < a.length; q += 16) {
                var B = b
                    , G = c
                    , H = t
                    , D = n;
                c = C(c = C(c = C(c = C(c = z(c = z(c = z(c = z(c = A(c = A(c = A(c = A(c = x(c = x(c = x(c = x(c, t = x(t, n = x(n, b = x(b, c, t, n, a[q + 0], 7, -680876936), c, t, a[q + 1], 12, -389564586), b, c, a[q + 2], 17, 606105819), n, b, a[q + 3], 22, -1044525330), t = x(t, n = x(n, b = x(b, c, t, n, a[q + 4], 7, -176418897), c, t, a[q + 5], 12, 1200080426), b, c, a[q + 6], 17, -1473231341), n, b, a[q + 7], 22, -45705983), t = x(t, n = x(n, b = x(b, c, t, n, a[q + 8], 7, 1770035416), c, t, a[q + 9], 12, -1958414417), b, c, a[q + 10], 17, -42063), n, b, a[q + 11], 22, -1990404162), t = x(t, n = x(n, b = x(b, c, t, n, a[q + 12], 7, 1804603682), c, t, a[q + 13], 12, -40341101), b, c, a[q + 14], 17, -1502002290), n, b, a[q + 15], 22, 1236535329), t = A(t, n = A(n, b = A(b, c, t, n, a[q + 1], 5, -165796510), c, t, a[q + 6], 9, -1069501632), b, c, a[q + 11], 14, 643717713), n, b, a[q + 0], 20, -373897302), t = A(t, n = A(n, b = A(b, c, t, n, a[q + 5], 5, -701558691), c, t, a[q + 10], 9, 38016083), b, c, a[q + 15], 14, -660478335), n, b, a[q + 4], 20, -405537848), t = A(t, n = A(n, b = A(b, c, t, n, a[q + 9], 5, 568446438), c, t, a[q + 14], 9, -1019803690), b, c, a[q + 3], 14, -187363961), n, b, a[q + 8], 20, 1163531501), t = A(t, n = A(n, b = A(b, c, t, n, a[q + 13], 5, -1444681467), c, t, a[q + 2], 9, -51403784), b, c, a[q + 7], 14, 1735328473), n, b, a[q + 12], 20, -1926607734), t = z(t, n = z(n, b = z(b, c, t, n, a[q + 5], 4, -378558), c, t, a[q + 8], 11, -2022574463), b, c, a[q + 11], 16, 1839030562), n, b, a[q + 14], 23, -35309556), t = z(t, n = z(n, b = z(b, c, t, n, a[q + 1], 4, -1530992060), c, t, a[q + 4], 11, 1272893353), b, c, a[q + 7], 16, -155497632), n, b, a[q + 10], 23, -1094730640), t = z(t, n = z(n, b = z(b, c, t, n, a[q + 13], 4, 681279174), c, t, a[q + 0], 11, -358537222), b, c, a[q + 3], 16, -722521979), n, b, a[q + 6], 23, 76029189), t = z(t, n = z(n, b = z(b, c, t, n, a[q + 9], 4, -640364487), c, t, a[q + 12], 11, -421815835), b, c, a[q + 15], 16, 530742520), n, b, a[q + 2], 23, -995338651), t = C(t, n = C(n, b = C(b, c, t, n, a[q + 0], 6, -198630844), c, t, a[q + 7], 10, 1126891415), b, c, a[q + 14], 15, -1416354905), n, b, a[q + 5], 21, -57434055), t = C(t, n = C(n, b = C(b, c, t, n, a[q + 12], 6, 1700485571), c, t, a[q + 3], 10, -1894986606), b, c, a[q + 10], 15, -1051523), n, b, a[q + 1], 21, -2054922799), t = C(t, n = C(n, b = C(b, c, t, n, a[q + 8], 6, 1873313359), c, t, a[q + 15], 10, -30611744), b, c, a[q + 6], 15, -1560198380), n, b, a[q + 13], 21, 1309151649), t = C(t, n = C(n, b = C(b, c, t, n, a[q + 4], 6, -145523070), c, t, a[q + 11], 10, -1120210379), b, c, a[q + 2], 15, 718787259), n, b, a[q + 9], 21, -343485551);
                b = F(b, B);
                c = F(c, G);
                t = F(t, H);
                n = F(n, D)
            }
            a = [b, c, t, n];
            b = g ? "0123456789ABCDEF" : "0123456789abcdef";
            c = "";
            for (t = 0; t < 4 * a.length; t++)
                c += b.charAt(a[t >> 2] >> t % 4 * 8 + 4 & 15) + b.charAt(a[t >> 2] >> t % 4 * 8 & 15);
            a = c
        }
        return a
    }
    function y(b, a, c, t, n, q) {
        b = F(F(a, b), F(t, q));
        return F(b << n | b >>> 32 - n, c)
    }
    function x(b, a, c, t, n, q, B) {
        return y(a & c | ~a & t, b, a, n, q, B)
    }
    function A(b, a, c, t, n, q, B) {
        return y(a & t | c & ~t, b, a, n, q, B)
    }
    function z(b, a, c, t, n, q, B) {
        return y(a ^ c ^ t, b, a, n, q, B)
    }
    function C(b, a, c, t, n, q, B) {
        return y(c ^ (a | ~t), b, a, n, q, B)
    }
    function F(b, a) {
        var c = (65535 & b) + (65535 & a);
        return (b >> 16) + (a >> 16) + (c >> 16) << 16 | 65535 & c
    }
    var g = 0
        , f = 8;
    _fingerprint_step = 2;
    var m = ""
        , u = navigator.userAgent.toLowerCase();
    u.indexOf("jdapp") && (u = u.substring(0, 90));
    var k = navigator.language
        , e = u;
    -1 == e.indexOf("ipad") && -1 == e.indexOf("iphone os") && -1 == e.indexOf("midp") && -1 == e.indexOf("rv:1.2.3.4") && -1 == e.indexOf("ucweb") && -1 == e.indexOf("android") && -1 == e.indexOf("windows ce") && e.indexOf("windows mobile");
    var h = "NA"
        , r = "NA";
    try {
        -1 != e.indexOf("win") && -1 != e.indexOf("95") && (h = "windows",
            r = "95"),
        -1 != e.indexOf("win") && -1 != e.indexOf("98") && (h = "windows",
            r = "98"),
        -1 != e.indexOf("win 9x") && -1 != e.indexOf("4.90") && (h = "windows",
            r = "me"),
        -1 != e.indexOf("win") && -1 != e.indexOf("nt 5.0") && (h = "windows",
            r = "2000"),
        -1 != e.indexOf("win") && -1 != e.indexOf("nt") && (h = "windows",
            r = "NT"),
        -1 != e.indexOf("win") && -1 != e.indexOf("nt 5.1") && (h = "windows",
            r = "xp"),
        -1 != e.indexOf("win") && -1 != e.indexOf("32") && (h = "windows",
            r = "32"),
        -1 != e.indexOf("win") && -1 != e.indexOf("nt 5.1") && (h = "windows",
            r = "7"),
        -1 != e.indexOf("win") && -1 != e.indexOf("6.0") && (h = "windows",
            r = "8"),
        -1 == e.indexOf("win") || -1 == e.indexOf("nt 6.0") && -1 == e.indexOf("nt 6.1") || (h = "windows",
            r = "9"),
        -1 != e.indexOf("win") && -1 != e.indexOf("nt 6.2") && (h = "windows",
            r = "10"),
        -1 != e.indexOf("linux") && (h = "linux"),
        -1 != e.indexOf("unix") && (h = "unix"),
        -1 != e.indexOf("sun") && -1 != e.indexOf("os") && (h = "sun os"),
        -1 != e.indexOf("ibm") && -1 != e.indexOf("os") && (h = "ibm os/2"),
        -1 != e.indexOf("mac") && -1 != e.indexOf("pc") && (h = "mac"),
        -1 != e.indexOf("aix") && (h = "aix"),
        -1 != e.indexOf("powerpc") && (h = "powerPC"),
        -1 != e.indexOf("hpux") && (h = "hpux"),
        -1 != e.indexOf("netbsd") && (h = "NetBSD"),
        -1 != e.indexOf("bsd") && (h = "BSD"),
        -1 != e.indexOf("osf1") && (h = "OSF1"),
        -1 != e.indexOf("irix") && (h = "IRIX",
            r = ""),
        -1 != e.indexOf("freebsd") && (h = "FreeBSD"),
        -1 != e.indexOf("symbianos") && (h = "SymbianOS",
            r = e.substring(e.indexOf("SymbianOS/") + 10, 3))
    } catch (b) {}
    _fingerprint_step = 3;
    var l = "NA"
        , w = "NA";
    try {
        -1 != e.indexOf("msie") && (l = "ie",
        (w = e.substring(e.indexOf("msie ") + 5)).indexOf(";") && (w = w.substring(0, w.indexOf(";")))),
        -1 != e.indexOf("firefox") && (l = "Firefox",
            w = e.substring(e.indexOf("firefox/") + 8)),
        -1 != e.indexOf("opera") && (l = "Opera",
            w = e.substring(e.indexOf("opera/") + 6, 4)),
        -1 != e.indexOf("safari") && (l = "safari",
            w = e.substring(e.indexOf("safari/") + 7)),
        -1 != e.indexOf("chrome") && (l = "chrome",
        (w = e.substring(e.indexOf("chrome/") + 7)).indexOf(" ") && (w = w.substring(0, w.indexOf(" ")))),
        -1 != e.indexOf("navigator") && (l = "navigator",
            w = e.substring(e.indexOf("navigator/") + 10)),
        -1 != e.indexOf("applewebkit") && (l = "applewebkit_chrome",
        (w = e.substring(e.indexOf("applewebkit/") + 12)).indexOf(" ") && (w = w.substring(0, w.indexOf(" ")))),
        -1 != e.indexOf("sogoumobilebrowser") && (l = "\u641c\u72d7\u624b\u673a\u6d4f\u89c8\u5668"),
        -1 == e.indexOf("ucbrowser") && -1 == e.indexOf("ucweb") || (l = "UC\u6d4f\u89c8\u5668"),
        -1 == e.indexOf("qqbrowser") && -1 == e.indexOf("tencenttraveler") || (l = "QQ\u6d4f\u89c8\u5668"),
        -1 != e.indexOf("metasr") && (l = "\u641c\u72d7\u6d4f\u89c8\u5668"),
        -1 != e.indexOf("360se") && (l = "360\u6d4f\u89c8\u5668"),
        -1 != e.indexOf("the world") && (l = "\u4e16\u754c\u4e4b\u7a97\u6d4f\u89c8\u5668"),
        -1 != e.indexOf("maxthon") && (l = "\u9068\u6e38\u6d4f\u89c8\u5668")
    } catch (b) {}
    e = function(b) {
        this.options = this.extend(b, {});
        this.nativeForEach = Array.prototype.forEach;
        this.nativeMap = Array.prototype.map
    }
    ;
    return e.prototype = {
        extend: function(b, a) {
            if (null == b)
                return a;
            for (var c in b)
                null != b[c] && a[c] !== b[c] && (a[c] = b[c]);
            return a
        },
        getData: function() {
            return m
        },
        get: function(b) {
            var a = 1 * w
                , c = [];
            "ie" == l && 7 <= a ? (c.push(u),
                c.push(k),
                m = m + ",'userAgent':'" + v(u) + "','language':'" + k + "'",
                this.browserRedirect(u)) : (c = this.userAgentKey(c),
                c = this.languageKey(c));
            c.push(l);
            c.push(w);
            c.push(h);
            c.push(r);
            m = m + ",'os':'" + h + "','osVersion':'" + r + "','browser':'" + l + "','browserVersion':'" + w + "'";
            c = this.colorDepthKey(c);
            c = this.screenResolutionKey(c);
            c = this.timezoneOffsetKey(c);
            c = this.sessionStorageKey(c);
            c = this.localStorageKey(c);
            c = this.indexedDbKey(c);
            c = this.addBehaviorKey(c);
            c = this.openDatabaseKey(c);
            c = this.cpuClassKey(c);
            c = this.platformKey(c);
            c = this.hardwareConcurrencyKey(c);
            c = this.doNotTrackKey(c);
            c = this.pluginsKey(c);
            c = this.canvasKey(c);
            c = this.webglKey(c);
            return b(this.x64hash128(c.join("~~~"), 31))
        },
        userAgentKey: function(b) {
            return this.options.excludeUserAgent || (b.push(navigator.userAgent),
                m = m + ",'userAgent':'" + v(navigator.userAgent) + "'",
                this.browserRedirect(navigator.userAgent)),
                b
        },
        replaceAll: function(b, a, c) {
            for (; 0 <= b.indexOf(a); )
                b = b.replace(a, c);
            return b
        },
        browserRedirect: function(b) {
            var a = b.toLowerCase();
            b = "ipad" == a.match(/ipad/i);
            var c = "iphone os" == a.match(/iphone os/i)
                , t = "midp" == a.match(/midp/i)
                , n = "rv:1.2.3.4" == a.match(/rv:1.2.3.4/i)
                , q = "ucweb" == a.match(/ucweb/i)
                , B = "android" == a.match(/android/i)
                , G = "windows ce" == a.match(/windows ce/i);
            a = "windows mobile" == a.match(/windows mobile/i);
            m += b || c || t || n || q || B || G || a ? ",'origin':'mobile'" : ",'origin':'pc'"
        },
        languageKey: function(b) {
            return this.options.excludeLanguage || (b.push(navigator.language),
                m = m + ",'language':'" + this.replaceAll(navigator.language, " ", "_") + "'"),
                b
        },
        colorDepthKey: function(b) {
            return this.options.excludeColorDepth || (b.push(screen.colorDepth),
                m = m + ",'colorDepth':'" + screen.colorDepth + "'"),
                b
        },
        screenResolutionKey: function(b) {
            if (!this.options.excludeScreenResolution) {
                var a = this.getScreenResolution();
                void 0 !== a && (b.push(a.join("x")),
                    m = m + ",'screenResolution':'" + a.join("x") + "'")
            }
            return b
        },
        getScreenResolution: function() {
            return this.options.detectScreenOrientation ? screen.height > screen.width ? [screen.height, screen.width] : [screen.width, screen.height] : [screen.height, screen.width]
        },
        timezoneOffsetKey: function(b) {
            return this.options.excludeTimezoneOffset || (b.push((new Date).getTimezoneOffset()),
                m = m + ",'timezoneOffset':'" + (new Date).getTimezoneOffset() / 60 + "'"),
                b
        },
        sessionStorageKey: function(b) {
            return !this.options.excludeSessionStorage && this.hasSessionStorage() && (b.push("sessionStorageKey"),
                m += ",'sessionStorage':true"),
                b
        },
        localStorageKey: function(b) {
            return !this.options.excludeSessionStorage && this.hasLocalStorage() && (b.push("localStorageKey"),
                m += ",'localStorage':true"),
                b
        },
        indexedDbKey: function(b) {
            return !this.options.excludeIndexedDB && this.hasIndexedDB() && (b.push("indexedDbKey"),
                m += ",'indexedDb':true"),
                b
        },
        addBehaviorKey: function(b) {
            return document.body && !this.options.excludeAddBehavior && document.body.addBehavior ? (b.push("addBehaviorKey"),
                m += ",'addBehavior':true") : m += ",'addBehavior':false",
                b
        },
        openDatabaseKey: function(b) {
            return !this.options.excludeOpenDatabase && window.openDatabase ? (b.push("openDatabase"),
                m += ",'openDatabase':true") : m += ",'openDatabase':false",
                b
        },
        cpuClassKey: function(b) {
            return this.options.excludeCpuClass || (b.push(this.getNavigatorCpuClass()),
                m = m + ",'cpu':'" + this.getNavigatorCpuClass() + "'"),
                b
        },
        platformKey: function(b) {
            return this.options.excludePlatform || (b.push(this.getNavigatorPlatform()),
                m = m + ",'platform':'" + this.getNavigatorPlatform() + "'"),
                b
        },
        hardwareConcurrencyKey: function(b) {
            var a = this.getHardwareConcurrency();
            return b.push(a),
                m = m + ",'ccn':'" + a + "'",
                b
        },
        doNotTrackKey: function(b) {
            return this.options.excludeDoNotTrack || (b.push(this.getDoNotTrack()),
                m = m + ",'track':'" + this.getDoNotTrack() + "'"),
                b
        },
        canvasKey: function(b) {
            if (!this.options.excludeCanvas && this.isCanvasSupported()) {
                var a = this.getCanvasFp();
                b.push(a);
                _jdfp_canvas_md5 = v(a);
                m = m + ",'canvas':'" + _jdfp_canvas_md5 + "'"
            }
            return b
        },
        webglKey: function(b) {
            if (!this.options.excludeWebGL && this.isCanvasSupported()) {
                var a = this.getWebglFp();
                _jdfp_webgl_md5 = v(a);
                b.push(a);
                m = m + ",'webglFp':'" + _jdfp_webgl_md5 + "'"
            }
            return b
        },
        pluginsKey: function(b) {
            return this.isIE() ? (b.push(this.getIEPluginsString()),
                m = m + ",'plugins':'" + v(this.getIEPluginsString()) + "'") : (b.push(this.getRegularPluginsString()),
                m = m + ",'plugins':'" + v(this.getRegularPluginsString()) + "'"),
                b
        },
        getRegularPluginsString: function() {
            return this.map(navigator.plugins, function(b) {
                var a = this.map(b, function(c) {
                    return [c.type, c.suffixes].join("~")
                }).join(",");
                return [b.name, b.description, a].join("::")
            }, this).join(";")
        },
        getIEPluginsString: function() {
            return window.ActiveXObject ? this.map("AcroPDF.PDF;Adodb.Stream;AgControl.AgControl;DevalVRXCtrl.DevalVRXCtrl.1;MacromediaFlashPaper.MacromediaFlashPaper;Msxml2.DOMDocument;Msxml2.XMLHTTP;PDF.PdfCtrl;QuickTime.QuickTime;QuickTimeCheckObject.QuickTimeCheck.1;RealPlayer;RealPlayer.RealPlayer(tm) ActiveX Control (32-bit);RealVideo.RealVideo(tm) ActiveX Control (32-bit);Scripting.Dictionary;SWCtl.SWCtl;Shell.UIHelper;ShockwaveFlash.ShockwaveFlash;Skype.Detection;TDCCtl.TDCCtl;WMPlayer.OCX;rmocx.RealPlayer G2 Control;rmocx.RealPlayer G2 Control.1".split(";"), function(b) {
                try {
                    return new ActiveXObject(b),
                        b
                } catch (a) {
                    return null
                }
            }).join(";") : ""
        },
        hasSessionStorage: function() {
            try {
                return !!window.sessionStorage
            } catch (b) {
                return !0
            }
        },
        hasLocalStorage: function() {
            try {
                return !!window.localStorage
            } catch (b) {
                return !0
            }
        },
        hasIndexedDB: function() {
            return !!window.indexedDB
        },
        getNavigatorCpuClass: function() {
            return navigator.cpuClass ? navigator.cpuClass : "NA"
        },
        getNavigatorPlatform: function() {
            return navigator.platform ? navigator.platform : "NA"
        },
        getHardwareConcurrency: function() {
            return navigator.hardwareConcurrency ? navigator.hardwareConcurrency : "NA"
        },
        getDoNotTrack: function() {
            return navigator.doNotTrack ? navigator.doNotTrack : "NA"
        },
        getCanvasFp: function() {
            var b = navigator.userAgent.toLowerCase();
            if ((0 < b.indexOf("jdjr-app") || 0 <= b.indexOf("jdapp")) && (0 < b.indexOf("iphone") || 0 < b.indexOf("ipad")))
                return null;
            b = document.createElement("canvas");
            var a = b.getContext("2d");
            return a.fillStyle = "red",
                a.fillRect(30, 10, 200, 100),
                a.strokeStyle = "#1a3bc1",
                a.lineWidth = 6,
                a.lineCap = "round",
                a.arc(50, 50, 20, 0, Math.PI, !1),
                a.stroke(),
                a.fillStyle = "#42e1a2",
                a.font = "15.4px 'Arial'",
                a.textBaseline = "alphabetic",
                a.fillText("PR flacks quiz gym: TV DJ box when? \u2620", 15, 60),
                a.shadowOffsetX = 1,
                a.shadowOffsetY = 2,
                a.shadowColor = "white",
                a.fillStyle = "rgba(0, 0, 200, 0.5)",
                a.font = "60px 'Not a real font'",
                a.fillText("No\u9a97", 40, 80),
                b.toDataURL()
        },
        getWebglFp: function() {
            var b = navigator.userAgent;
            if ((0 < (b = b.toLowerCase()).indexOf("jdjr-app") || 0 <= b.indexOf("jdapp")) && (0 < b.indexOf("iphone") || 0 < b.indexOf("ipad")))
                return null;
            var a;
            b = function(H) {
                return a.clearColor(0, 0, 0, 1),
                    a.enable(a.DEPTH_TEST),
                    a.depthFunc(a.LEQUAL),
                    a.clear(a.COLOR_BUFFER_BIT | a.DEPTH_BUFFER_BIT),
                "[" + H[0] + ", " + H[1] + "]"
            }
            ;
            if (!(a = this.getWebglCanvas()))
                return null;
            var c = []
                , t = a.createBuffer();
            a.bindBuffer(a.ARRAY_BUFFER, t);
            var n = new Float32Array([-.2, -.9, 0, .4, -.26, 0, 0, .732134444, 0]);
            a.bufferData(a.ARRAY_BUFFER, n, a.STATIC_DRAW);
            t.itemSize = 3;
            t.numItems = 3;
            n = a.createProgram();
            var q = a.createShader(a.VERTEX_SHADER);
            a.shaderSource(q, "attribute vec2 attrVertex;varying vec2 varyinTexCoordinate;uniform vec2 uniformOffset;void main(){varyinTexCoordinate=attrVertex+uniformOffset;gl_Position=vec4(attrVertex,0,1);}");
            a.compileShader(q);
            var B = a.createShader(a.FRAGMENT_SHADER);
            a.shaderSource(B, "precision mediump float;varying vec2 varyinTexCoordinate;void main() {gl_FragColor=vec4(varyinTexCoordinate,0,1);}");
            a.compileShader(B);
            a.attachShader(n, q);
            a.attachShader(n, B);
            a.linkProgram(n);
            a.useProgram(n);
            n.vertexPosAttrib = a.getAttribLocation(n, "attrVertex");
            n.offsetUniform = a.getUniformLocation(n, "uniformOffset");
            a.enableVertexAttribArray(n.vertexPosArray);
            a.vertexAttribPointer(n.vertexPosAttrib, t.itemSize, a.FLOAT, !1, 0, 0);
            a.uniform2f(n.offsetUniform, 1, 1);
            a.drawArrays(a.TRIANGLE_STRIP, 0, t.numItems);
            null != a.canvas && c.push(a.canvas.toDataURL());
            c.push("extensions:" + a.getSupportedExtensions().join(";"));
            c.push("extensions:" + a.getSupportedExtensions().join(";"));
            c.push("w1" + b(a.getParameter(a.ALIASED_LINE_WIDTH_RANGE)));
            c.push("w2" + b(a.getParameter(a.ALIASED_POINT_SIZE_RANGE)));
            c.push("w3" + a.getParameter(a.ALPHA_BITS));
            c.push("w4" + (a.getContextAttributes().antialias ? "yes" : "no"));
            c.push("w5" + a.getParameter(a.BLUE_BITS));
            c.push("w6" + a.getParameter(a.DEPTH_BITS));
            c.push("w7" + a.getParameter(a.GREEN_BITS));
            c.push("w8" + function(H) {
                var D, I = H.getExtension("EXT_texture_filter_anisotropic") || H.getExtension("WEBKIT_EXT_texture_filter_anisotropic") || H.getExtension("MOZ_EXT_texture_filter_anisotropic");
                return I ? (0 === (D = H.getParameter(I.MAX_TEXTURE_MAX_ANISOTROPY_EXT)) && (D = 2),
                    D) : null
            }(a));
            c.push("w9" + a.getParameter(a.MAX_COMBINED_TEXTURE_IMAGE_UNITS));
            c.push("w10" + a.getParameter(a.MAX_CUBE_MAP_TEXTURE_SIZE));
            c.push("w11" + a.getParameter(a.MAX_FRAGMENT_UNIFORM_VECTORS));
            c.push("w12" + a.getParameter(a.MAX_RENDERBUFFER_SIZE));
            c.push("w13" + a.getParameter(a.MAX_TEXTURE_IMAGE_UNITS));
            c.push("w14" + a.getParameter(a.MAX_TEXTURE_SIZE));
            c.push("w15" + a.getParameter(a.MAX_VARYING_VECTORS));
            c.push("w16" + a.getParameter(a.MAX_VERTEX_ATTRIBS));
            c.push("w17" + a.getParameter(a.MAX_VERTEX_TEXTURE_IMAGE_UNITS));
            c.push("w18" + a.getParameter(a.MAX_VERTEX_UNIFORM_VECTORS));
            c.push("w19" + b(a.getParameter(a.MAX_VIEWPORT_DIMS)));
            c.push("w20" + a.getParameter(a.RED_BITS));
            c.push("w21" + a.getParameter(a.RENDERER));
            c.push("w22" + a.getParameter(a.SHADING_LANGUAGE_VERSION));
            c.push("w23" + a.getParameter(a.STENCIL_BITS));
            c.push("w24" + a.getParameter(a.VENDOR));
            c.push("w25" + a.getParameter(a.VERSION));
            try {
                var G = a.getExtension("WEBGL_debug_renderer_info");
                G && (c.push("wuv:" + a.getParameter(G.UNMASKED_VENDOR_WEBGL)),
                    c.push("wur:" + a.getParameter(G.UNMASKED_RENDERER_WEBGL)))
            } catch (H) {}
            return c.join("\u00a7")
        },
        isCanvasSupported: function() {
            var b = document.createElement("canvas");
            return !(!b.getContext || !b.getContext("2d"))
        },
        isIE: function() {
            return "Microsoft Internet Explorer" === navigator.appName || !("Netscape" !== navigator.appName || !/Trident/.test(navigator.userAgent))
        },
        getWebglCanvas: function() {
            var b = document.createElement("canvas")
                , a = null;
            try {
                var c = navigator.userAgent;
                (0 < (c = c.toLowerCase()).indexOf("jdjr-app") || 0 <= c.indexOf("jdapp")) && (0 < c.indexOf("iphone") || 0 < c.indexOf("ipad")) || (a = b.getContext("webgl") || b.getContext("experimental-webgl"))
            } catch (t) {}
            return a || (a = null),
                a
        },
        each: function(b, a, c) {
            if (null !== b)
                if (this.nativeForEach && b.forEach === this.nativeForEach)
                    b.forEach(a, c);
                else if (b.length === +b.length)
                    for (var t = 0, n = b.length; t < n && a.call(c, b[t], t, b) !== {}; t++)
                        ;
                else
                    for (t in b)
                        if (b.hasOwnProperty(t) && a.call(c, b[t], t, b) === {})
                            break
        },
        map: function(b, a, c) {
            var t = [];
            return null == b ? t : this.nativeMap && b.map === this.nativeMap ? b.map(a, c) : (this.each(b, function(n, q, B) {
                t[t.length] = a.call(c, n, q, B)
            }),
                t)
        },
        x64Add: function(b, a) {
            b = [b[0] >>> 16, 65535 & b[0], b[1] >>> 16, 65535 & b[1]];
            a = [a[0] >>> 16, 65535 & a[0], a[1] >>> 16, 65535 & a[1]];
            var c = [0, 0, 0, 0];
            return c[3] += b[3] + a[3],
                c[2] += c[3] >>> 16,
                c[3] &= 65535,
                c[2] += b[2] + a[2],
                c[1] += c[2] >>> 16,
                c[2] &= 65535,
                c[1] += b[1] + a[1],
                c[0] += c[1] >>> 16,
                c[1] &= 65535,
                c[0] += b[0] + a[0],
                c[0] &= 65535,
                [c[0] << 16 | c[1], c[2] << 16 | c[3]]
        },
        x64Multiply: function(b, a) {
            b = [b[0] >>> 16, 65535 & b[0], b[1] >>> 16, 65535 & b[1]];
            a = [a[0] >>> 16, 65535 & a[0], a[1] >>> 16, 65535 & a[1]];
            var c = [0, 0, 0, 0];
            return c[3] += b[3] * a[3],
                c[2] += c[3] >>> 16,
                c[3] &= 65535,
                c[2] += b[2] * a[3],
                c[1] += c[2] >>> 16,
                c[2] &= 65535,
                c[2] += b[3] * a[2],
                c[1] += c[2] >>> 16,
                c[2] &= 65535,
                c[1] += b[1] * a[3],
                c[0] += c[1] >>> 16,
                c[1] &= 65535,
                c[1] += b[2] * a[2],
                c[0] += c[1] >>> 16,
                c[1] &= 65535,
                c[1] += b[3] * a[1],
                c[0] += c[1] >>> 16,
                c[1] &= 65535,
                c[0] += b[0] * a[3] + b[1] * a[2] + b[2] * a[1] + b[3] * a[0],
                c[0] &= 65535,
                [c[0] << 16 | c[1], c[2] << 16 | c[3]]
        },
        x64Rotl: function(b, a) {
            return a %= 64,
                32 === a ? [b[1], b[0]] : 32 > a ? [b[0] << a | b[1] >>> 32 - a, b[1] << a | b[0] >>> 32 - a] : (a -= 32,
                    [b[1] << a | b[0] >>> 32 - a, b[0] << a | b[1] >>> 32 - a])
        },
        x64LeftShift: function(b, a) {
            return a %= 64,
                0 === a ? b : 32 > a ? [b[0] << a | b[1] >>> 32 - a, b[1] << a] : [b[1] << a - 32, 0]
        },
        x64Xor: function(b, a) {
            return [b[0] ^ a[0], b[1] ^ a[1]]
        },
        x64Fmix: function(b) {
            return b = this.x64Xor(b, [0, b[0] >>> 1]),
                b = this.x64Multiply(b, [4283543511, 3981806797]),
                b = this.x64Xor(b, [0, b[0] >>> 1]),
                b = this.x64Multiply(b, [3301882366, 444984403]),
                this.x64Xor(b, [0, b[0] >>> 1])
        },
        x64hash128: function(b, a) {
            b = b || "";
            a = a || 0;
            var c = b.length % 16
                , t = b.length - c
                , n = [0, a];
            a = [0, a];
            for (var q, B, G = [2277735313, 289559509], H = [1291169091, 658871167], D = 0; D < t; D += 16)
                q = [255 & b.charCodeAt(D + 4) | (255 & b.charCodeAt(D + 5)) << 8 | (255 & b.charCodeAt(D + 6)) << 16 | (255 & b.charCodeAt(D + 7)) << 24, 255 & b.charCodeAt(D) | (255 & b.charCodeAt(D + 1)) << 8 | (255 & b.charCodeAt(D + 2)) << 16 | (255 & b.charCodeAt(D + 3)) << 24],
                    B = [255 & b.charCodeAt(D + 12) | (255 & b.charCodeAt(D + 13)) << 8 | (255 & b.charCodeAt(D + 14)) << 16 | (255 & b.charCodeAt(D + 15)) << 24, 255 & b.charCodeAt(D + 8) | (255 & b.charCodeAt(D + 9)) << 8 | (255 & b.charCodeAt(D + 10)) << 16 | (255 & b.charCodeAt(D + 11)) << 24],
                    q = this.x64Multiply(q, G),
                    q = this.x64Rotl(q, 31),
                    q = this.x64Multiply(q, H),
                    n = this.x64Xor(n, q),
                    n = this.x64Rotl(n, 27),
                    n = this.x64Add(n, a),
                    n = this.x64Add(this.x64Multiply(n, [0, 5]), [0, 1390208809]),
                    B = this.x64Multiply(B, H),
                    B = this.x64Rotl(B, 33),
                    B = this.x64Multiply(B, G),
                    a = this.x64Xor(a, B),
                    a = this.x64Rotl(a, 31),
                    a = this.x64Add(a, n),
                    a = this.x64Add(this.x64Multiply(a, [0, 5]), [0, 944331445]);
            switch (q = [0, 0],
                B = [0, 0],
                c) {
                case 15:
                    B = this.x64Xor(B, this.x64LeftShift([0, b.charCodeAt(D + 14)], 48));
                case 14:
                    B = this.x64Xor(B, this.x64LeftShift([0, b.charCodeAt(D + 13)], 40));
                case 13:
                    B = this.x64Xor(B, this.x64LeftShift([0, b.charCodeAt(D + 12)], 32));
                case 12:
                    B = this.x64Xor(B, this.x64LeftShift([0, b.charCodeAt(D + 11)], 24));
                case 11:
                    B = this.x64Xor(B, this.x64LeftShift([0, b.charCodeAt(D + 10)], 16));
                case 10:
                    B = this.x64Xor(B, this.x64LeftShift([0, b.charCodeAt(D + 9)], 8));
                case 9:
                    B = this.x64Xor(B, [0, b.charCodeAt(D + 8)]),
                        B = this.x64Multiply(B, H),
                        B = this.x64Rotl(B, 33),
                        B = this.x64Multiply(B, G),
                        a = this.x64Xor(a, B);
                case 8:
                    q = this.x64Xor(q, this.x64LeftShift([0, b.charCodeAt(D + 7)], 56));
                case 7:
                    q = this.x64Xor(q, this.x64LeftShift([0, b.charCodeAt(D + 6)], 48));
                case 6:
                    q = this.x64Xor(q, this.x64LeftShift([0, b.charCodeAt(D + 5)], 40));
                case 5:
                    q = this.x64Xor(q, this.x64LeftShift([0, b.charCodeAt(D + 4)], 32));
                case 4:
                    q = this.x64Xor(q, this.x64LeftShift([0, b.charCodeAt(D + 3)], 24));
                case 3:
                    q = this.x64Xor(q, this.x64LeftShift([0, b.charCodeAt(D + 2)], 16));
                case 2:
                    q = this.x64Xor(q, this.x64LeftShift([0, b.charCodeAt(D + 1)], 8));
                case 1:
                    q = this.x64Xor(q, [0, b.charCodeAt(D)]),
                        q = this.x64Multiply(q, G),
                        q = this.x64Rotl(q, 31),
                        q = this.x64Multiply(q, H),
                        n = this.x64Xor(n, q)
            }
            return n = this.x64Xor(n, [0, b.length]),
                a = this.x64Xor(a, [0, b.length]),
                n = this.x64Add(n, a),
                a = this.x64Add(a, n),
                n = this.x64Fmix(n),
                a = this.x64Fmix(a),
                n = this.x64Add(n, a),
                a = this.x64Add(a, n),
            ("00000000" + (n[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (n[1] >>> 0).toString(16)).slice(-8) + ("00000000" + (a[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (a[1] >>> 0).toString(16)).slice(-8)
        }
    },
        e
});
var JDDSecCryptoJS = JDDSecCryptoJS || function(v, y) {
    y = {};
    var x = y.lib = {}
        , A = x.Base = function() {
        function k() {}
        return {
            extend: function(e) {
                k.prototype = this;
                var h = new k;
                return e && h.mixIn(e),
                h.hasOwnProperty("init") || (h.init = function() {
                        h.$super.init.apply(this, arguments)
                    }
                ),
                    h.init.prototype = h,
                    h.$super = this,
                    h
            },
            create: function() {
                var e = this.extend();
                return e.init.apply(e, arguments),
                    e
            },
            init: function() {},
            mixIn: function(e) {
                for (var h in e)
                    e.hasOwnProperty(h) && (this[h] = e[h]);
                e.hasOwnProperty("toString") && (this.toString = e.toString)
            },
            clone: function() {
                return this.init.prototype.extend(this)
            }
        }
    }()
        , z = x.WordArray = A.extend({
        init: function(k, e) {
            k = this.words = k || [];
            this.sigBytes = void 0 != e ? e : 4 * k.length
        },
        toString: function(k) {
            return (k || F).stringify(this)
        },
        concat: function(k) {
            var e = this.words
                , h = k.words
                , r = this.sigBytes;
            k = k.sigBytes;
            if (this.clamp(),
            r % 4)
                for (l = 0; l < k; l++)
                    e[r + l >>> 2] |= (h[l >>> 2] >>> 24 - l % 4 * 8 & 255) << 24 - (r + l) % 4 * 8;
            else if (65535 < h.length)
                for (var l = 0; l < k; l += 4)
                    e[r + l >>> 2] = h[l >>> 2];
            else
                e.push.apply(e, h);
            return this.sigBytes += k,
                this
        },
        clamp: function() {
            var k = this.words
                , e = this.sigBytes;
            k[e >>> 2] &= 4294967295 << 32 - e % 4 * 8;
            k.length = v.ceil(e / 4)
        },
        clone: function() {
            var k = A.clone.call(this);
            return k.words = this.words.slice(0),
                k
        },
        random: function(k) {
            for (var e = [], h = 0; h < k; h += 4)
                e.push(4294967296 * v.random() | 0);
            return new z.init(e,k)
        }
    })
        , C = (x.UUID = A.extend({
        generateUuid: function() {
            for (var k = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split(""), e = 0, h = k.length; e < h; e++)
                switch (k[e]) {
                    case "x":
                        k[e] = v.floor(16 * v.random()).toString(16);
                        break;
                    case "y":
                        k[e] = (v.floor(4 * v.random()) + 8).toString(16)
                }
            return k.join("")
        }
    }),
        y.enc = {})
        , F = C.Hex = {
        stringify: function(k) {
            var e = k.words;
            k = k.sigBytes;
            var h = [];
            for (var r = 0; r < k; r++) {
                var l = e[r >>> 2] >>> 24 - r % 4 * 8 & 255;
                h.push((l >>> 4).toString(16));
                h.push((15 & l).toString(16))
            }
            return h.join("")
        },
        parse: function(k) {
            for (var e = k.length, h = [], r = 0; r < e; r += 2)
                h[r >>> 3] |= parseInt(k.substr(r, 2), 16) << 24 - r % 8 * 4;
            return new z.init(h,e / 2)
        }
    }
        , g = C.Latin1 = {
        stringify: function(k) {
            var e = k.words;
            k = k.sigBytes;
            for (var h = [], r = 0; r < k; r++)
                h.push(String.fromCharCode(e[r >>> 2] >>> 24 - r % 4 * 8 & 255));
            return h.join("")
        },
        parse: function(k) {
            for (var e = k.length, h = [], r = 0; r < e; r++)
                h[r >>> 2] |= (255 & k.charCodeAt(r)) << 24 - r % 4 * 8;
            return new z.init(h,e)
        }
    }
        , f = C.Utf8 = {
        stringify: function(k) {
            try {
                return decodeURIComponent(escape(g.stringify(k)))
            } catch (e) {
                throw Error("Malformed UTF-8 data");
            }
        },
        parse: function(k) {
            return g.parse(unescape(encodeURIComponent(k)))
        }
    }
        , m = x.BufferedBlockAlgorithm = A.extend({
        reset: function() {
            this._data = new z.init;
            this._nDataBytes = 0
        },
        _append: function(k) {
            "string" == typeof k && (k = f.parse(k));
            this._data.concat(k);
            this._nDataBytes += k.sigBytes
        },
        _process: function(k) {
            var e = this._data
                , h = e.words
                , r = e.sigBytes
                , l = this.blockSize
                , w = r / (4 * l);
            k = (k ? v.ceil(w) : v.max((0 | w) - this._minBufferSize, 0)) * l;
            r = v.min(4 * k, r);
            if (k) {
                for (var b = 0; b < k; b += l)
                    this._doProcessBlock(h, b);
                b = h.splice(0, k);
                e.sigBytes -= r
            }
            return new z.init(b,r)
        },
        clone: function() {
            var k = A.clone.call(this);
            return k._data = this._data.clone(),
                k
        },
        _minBufferSize: 0
    })
        , u = (x.Hasher = m.extend({
        cfg: A.extend(),
        init: function(k) {
            this.cfg = this.cfg.extend(k);
            this.reset()
        },
        reset: function() {
            m.reset.call(this);
            this._doReset()
        },
        update: function(k) {
            return this._append(k),
                this._process(),
                this
        },
        finalize: function(k) {
            return k && this._append(k),
                this._doFinalize()
        },
        blockSize: 16,
        _createHelper: function(k) {
            return function(e, h) {
                return (new k.init(h)).finalize(e)
            }
        },
        _createHmacHelper: function(k) {
            return function(e, h) {
                return (new u.HMAC.init(k,h)).finalize(e)
            }
        }
    }),
        y.algo = {});
    y.channel = {};
    return y
}(Math);
JDDSecCryptoJS.lib.Cipher || function(v) {
    var y = JDDSecCryptoJS
        , x = y.lib
        , A = x.Base
        , z = x.WordArray
        , C = x.BufferedBlockAlgorithm
        , F = y.enc
        , g = (F.Utf8,
        F.Base64,
        y.algo.EvpKDF,
        x.Cipher = C.extend({
            cfg: A.extend(),
            createEncryptor: function(e, h) {
                return this.create(this._ENC_XFORM_MODE, e, h)
            },
            createDecryptor: function(e, h) {
                return this.create(this._DEC_XFORM_MODE, e, h)
            },
            init: function(e, h, r) {
                this.cfg = this.cfg.extend(r);
                this._xformMode = e;
                this._key = h;
                this.reset()
            },
            reset: function() {
                C.reset.call(this);
                this._doReset()
            },
            process: function(e) {
                return this._append(e),
                    this._process()
            },
            finalize: function(e) {
                return e && this._append(e),
                    this._doFinalize()
            },
            keySize: 4,
            ivSize: 4,
            _ENC_XFORM_MODE: 1,
            _DEC_XFORM_MODE: 2,
            _createHelper: function() {
                function e(h) {
                    if ("string" != typeof h)
                        return k
                }
                return function(h) {
                    return {
                        encrypt: function(r, l, w) {
                            return e(l).encrypt(h, r, l, w)
                        },
                        decrypt: function(r, l, w) {
                            return e(l).decrypt(h, r, l, w)
                        }
                    }
                }
            }()
        }));
    F = (x.StreamCipher = g.extend({
        _doFinalize: function() {
            return this._process(!0)
        },
        blockSize: 1
    }),
        y.mode = {});
    var f = x.BlockCipherMode = A.extend({
        createEncryptor: function(e, h) {
            return this.Encryptor.create(e, h)
        },
        createDecryptor: function(e, h) {
            return this.Decryptor.create(e, h)
        },
        init: function(e, h) {
            this._cipher = e;
            this._iv = h
        }
    });
    F = F.CBC = function() {
        function e(r, l, w) {
            var b = this._iv;
            b ? this._iv = v : b = this._prevBlock;
            for (var a = 0; a < w; a++)
                r[l + a] ^= b[a]
        }
        var h = f.extend();
        return h.Encryptor = h.extend({
            processBlock: function(r, l) {
                var w = this._cipher
                    , b = w.blockSize;
                e.call(this, r, l, b);
                w.encryptBlock(r, l);
                this._prevBlock = r.slice(l, l + b)
            }
        }),
            h.Decryptor = h.extend({
                processBlock: function(r, l) {
                    var w = this._cipher
                        , b = w.blockSize
                        , a = r.slice(l, l + b);
                    w.decryptBlock(r, l);
                    e.call(this, r, l, b);
                    this._prevBlock = a
                }
            }),
            h
    }();
    var m = (y.pad = {}).Pkcs7 = {
        pad: function(e, h) {
            h *= 4;
            h -= e.sigBytes % h;
            for (var r = h << 24 | h << 16 | h << 8 | h, l = [], w = 0; w < h; w += 4)
                l.push(r);
            h = z.create(l, h);
            e.concat(h)
        },
        unpad: function(e) {
            e.sigBytes -= 255 & e.words[e.sigBytes - 1 >>> 2]
        }
    }
        , u = (x.BlockCipher = g.extend({
        cfg: g.cfg.extend({
            mode: F,
            padding: m
        }),
        reset: function() {
            g.reset.call(this);
            var e = this.cfg
                , h = e.iv;
            e = e.mode;
            if (this._xformMode == this._ENC_XFORM_MODE)
                r = e.createEncryptor;
            else {
                var r = e.createDecryptor;
                this._minBufferSize = 1
            }
            this._mode = r.call(e, this, h && h.words)
        },
        _doProcessBlock: function(e, h) {
            this._mode.processBlock(e, h)
        },
        _doFinalize: function() {
            var e = this.cfg.padding;
            if (this._xformMode == this._ENC_XFORM_MODE)
                e.pad(this._data, this.blockSize),
                    h = this._process(!0);
            else {
                var h = this._process(!0);
                e.unpad(h)
            }
            return h
        },
        blockSize: 4
    }),
        x.CipherParams = A.extend({
            init: function(e) {
                this.mixIn(e)
            },
            toString: function(e) {
                return (e || this.formatter).stringify(this)
            }
        }))
        , k = (y.format = {},
        x.SerializableCipher = A.extend({
            cfg: A.extend({}),
            encrypt: function(e, h, r, l) {
                l = this.cfg.extend(l);
                var w = e.createEncryptor(r, l);
                h = w.finalize(h);
                w = w.cfg;
                return u.create({
                    ciphertext: h,
                    key: r,
                    iv: w.iv,
                    algorithm: e,
                    mode: w.mode,
                    padding: w.padding,
                    blockSize: e.blockSize,
                    formatter: l.format
                })
            },
            decrypt: function(e, h, r, l) {
                return l = this.cfg.extend(l),
                    h = this._parse(h, l.format),
                    e.createDecryptor(r, l).finalize(h.ciphertext)
            },
            _parse: function(e, h) {
                return "string" == typeof e ? h.parse(e, this) : e
            }
        }))
}();
(function() {
        var v = JDDSecCryptoJS
            , y = v.lib.BlockCipher
            , x = v.algo
            , A = []
            , z = []
            , C = []
            , F = []
            , g = []
            , f = []
            , m = []
            , u = []
            , k = []
            , e = [];
        !function() {
            for (var r = [], l = 0; 256 > l; l++)
                r[l] = 128 > l ? l << 1 : l << 1 ^ 283;
            var w = 0
                , b = 0;
            for (l = 0; 256 > l; l++) {
                var a = b ^ b << 1 ^ b << 2 ^ b << 3 ^ b << 4;
                a = a >>> 8 ^ 255 & a ^ 99;
                A[w] = a;
                z[a] = w;
                var c = r[w]
                    , t = r[c]
                    , n = r[t]
                    , q = 257 * r[a] ^ 16843008 * a;
                C[w] = q << 24 | q >>> 8;
                F[w] = q << 16 | q >>> 16;
                g[w] = q << 8 | q >>> 24;
                f[w] = q;
                q = 16843009 * n ^ 65537 * t ^ 257 * c ^ 16843008 * w;
                m[a] = q << 24 | q >>> 8;
                u[a] = q << 16 | q >>> 16;
                k[a] = q << 8 | q >>> 24;
                e[a] = q;
                w ? (w = c ^ r[r[r[n ^ c]]],
                    b ^= r[r[b]]) : w = b = 1
            }
        }();
        var h = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54];
        x = x.AES = y.extend({
            _doReset: function() {
                var r = this._key
                    , l = r.words
                    , w = r.sigBytes / 4;
                r = 4 * ((this._nRounds = w + 6) + 1);
                for (var b = this._keySchedule = [], a = 0; a < r; a++)
                    a < w ? b[a] = l[a] : (c = b[a - 1],
                        a % w ? 6 < w && 4 == a % w && (c = A[c >>> 24] << 24 | A[c >>> 16 & 255] << 16 | A[c >>> 8 & 255] << 8 | A[255 & c]) : (c = A[(c = c << 8 | c >>> 24) >>> 24] << 24 | A[c >>> 16 & 255] << 16 | A[c >>> 8 & 255] << 8 | A[255 & c],
                            c ^= h[a / w | 0] << 24),
                        b[a] = b[a - w] ^ c);
                l = this._invKeySchedule = [];
                for (w = 0; w < r; w++) {
                    a = r - w;
                    var c = w % 4 ? b[a] : b[a - 4];
                    l[w] = 4 > w || 4 >= a ? c : m[A[c >>> 24]] ^ u[A[c >>> 16 & 255]] ^ k[A[c >>> 8 & 255]] ^ e[A[255 & c]]
                }
            },
            encryptBlock: function(r, l) {
                this._doCryptBlock(r, l, this._keySchedule, C, F, g, f, A)
            },
            decryptBlock: function(r, l) {
                w = r[l + 1];
                r[l + 1] = r[l + 3];
                r[l + 3] = w;
                this._doCryptBlock(r, l, this._invKeySchedule, m, u, k, e, z);
                var w = r[l + 1];
                r[l + 1] = r[l + 3];
                r[l + 3] = w
            },
            _doCryptBlock: function(r, l, w, b, a, c, t, n) {
                for (var q = this._nRounds, B = r[l] ^ w[0], G = r[l + 1] ^ w[1], H = r[l + 2] ^ w[2], D = r[l + 3] ^ w[3], I = 4, M = 1; M < q; M++) {
                    var J = b[B >>> 24] ^ a[G >>> 16 & 255] ^ c[H >>> 8 & 255] ^ t[255 & D] ^ w[I++]
                        , K = b[G >>> 24] ^ a[H >>> 16 & 255] ^ c[D >>> 8 & 255] ^ t[255 & B] ^ w[I++]
                        , L = b[H >>> 24] ^ a[D >>> 16 & 255] ^ c[B >>> 8 & 255] ^ t[255 & G] ^ w[I++];
                    D = b[D >>> 24] ^ a[B >>> 16 & 255] ^ c[G >>> 8 & 255] ^ t[255 & H] ^ w[I++];
                    B = J;
                    G = K;
                    H = L
                }
                J = (n[B >>> 24] << 24 | n[G >>> 16 & 255] << 16 | n[H >>> 8 & 255] << 8 | n[255 & D]) ^ w[I++];
                K = (n[G >>> 24] << 24 | n[H >>> 16 & 255] << 16 | n[D >>> 8 & 255] << 8 | n[255 & B]) ^ w[I++];
                L = (n[H >>> 24] << 24 | n[D >>> 16 & 255] << 16 | n[B >>> 8 & 255] << 8 | n[255 & G]) ^ w[I++];
                D = (n[D >>> 24] << 24 | n[B >>> 16 & 255] << 16 | n[G >>> 8 & 255] << 8 | n[255 & H]) ^ w[I++];
                r[l] = J;
                r[l + 1] = K;
                r[l + 2] = L;
                r[l + 3] = D
            },
            keySize: 8
        });
        v.AES = y._createHelper(x)
    }
)();
(function() {
        var v = JDDSecCryptoJS
            , y = v.lib
            , x = y.WordArray
            , A = y.Hasher
            , z = [];
        y = v.algo.SHA1 = A.extend({
            _doReset: function() {
                this._hash = new x.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
            },
            _doProcessBlock: function(C, F) {
                for (var g = this._hash.words, f = g[0], m = g[1], u = g[2], k = g[3], e = g[4], h = 0; 80 > h; h++) {
                    if (16 > h)
                        z[h] = 0 | C[F + h];
                    else {
                        var r = z[h - 3] ^ z[h - 8] ^ z[h - 14] ^ z[h - 16];
                        z[h] = r << 1 | r >>> 31
                    }
                    r = (f << 5 | f >>> 27) + e + z[h];
                    r += 20 > h ? 1518500249 + (m & u | ~m & k) : 40 > h ? 1859775393 + (m ^ u ^ k) : 60 > h ? (m & u | m & k | u & k) - 1894007588 : (m ^ u ^ k) - 899497514;
                    e = k;
                    k = u;
                    u = m << 30 | m >>> 2;
                    m = f;
                    f = r
                }
                g[0] = g[0] + f | 0;
                g[1] = g[1] + m | 0;
                g[2] = g[2] + u | 0;
                g[3] = g[3] + k | 0;
                g[4] = g[4] + e | 0
            },
            _doFinalize: function() {
                var C = this._data
                    , F = C.words
                    , g = 8 * this._nDataBytes
                    , f = 8 * C.sigBytes;
                return F[f >>> 5] |= 128 << 24 - f % 32,
                    F[14 + (f + 64 >>> 9 << 4)] = Math.floor(g / 4294967296),
                    F[15 + (f + 64 >>> 9 << 4)] = g,
                    C.sigBytes = 4 * F.length,
                    this._process(),
                    this._hash
            },
            clone: function() {
                var C = A.clone.call(this);
                return C._hash = this._hash.clone(),
                    C
            }
        });
        v.SHA1 = A._createHelper(y);
        v.HmacSHA1 = A._createHmacHelper(y)
    }
)();
(function() {
        var v = JDDSecCryptoJS
            , y = v.channel;
        y.Downlink = {
            deBase32: function(x) {
                if (void 0 == x || "" == x || null == x)
                    return "";
                var A = v.enc.Hex.parse("30313233343536373839616263646566")
                    , z = v.enc.Hex.parse("724e5428476f307361374d3233784a6c");
                return v.AES.decrypt({
                    ciphertext: v.enc.Base32.parse(x)
                }, z, {
                    mode: v.mode.CBC,
                    padding: v.pad.Pkcs7,
                    iv: A
                }).toString(v.enc.Utf8)
            },
            deBase64: function(x) {
                return ""
            }
        };
        y.Uplink = {
            enAsBase32: function(x) {
                return ""
            },
            enAsBase64: function(x) {
                return ""
            }
        }
    }
)();
(function() {
        var v = JDDSecCryptoJS
            , y = v.lib.WordArray;
        v.enc.Base32 = {
            stringify: function(x) {
                var A = x.words
                    , z = x.sigBytes
                    , C = this._map;
                x.clamp();
                x = [];
                for (var F = 0; F < z; F += 5) {
                    for (var g = [], f = 0; 5 > f; f++)
                        g[f] = A[F + f >>> 2] >>> 24 - (F + f) % 4 * 8 & 255;
                    g = [g[0] >>> 3 & 31, (7 & g[0]) << 2 | g[1] >>> 6 & 3, g[1] >>> 1 & 31, (1 & g[1]) << 4 | g[2] >>> 4 & 15, (15 & g[2]) << 1 | g[3] >>> 7 & 1, g[3] >>> 2 & 31, (3 & g[3]) << 3 | g[4] >>> 5 & 7, 31 & g[4]];
                    for (f = 0; 8 > f && F + .625 * f < z; f++)
                        x.push(C.charAt(g[f]))
                }
                if (A = C.charAt(32))
                    for (; x.length % 8; )
                        x.push(A);
                return x.join("")
            },
            parse: function(x) {
                var A = x.length
                    , z = this._map
                    , C = z.charAt(32);
                C && (C = x.indexOf(C),
                -1 != C && (A = C));
                C = [];
                for (var F = 0, g = 0; g < A; g++) {
                    var f = g % 8;
                    if (0 != f && 2 != f && 5 != f) {
                        var m = 255 & z.indexOf(x.charAt(g - 1)) << (40 - 5 * f) % 8
                            , u = 255 & z.indexOf(x.charAt(g)) >>> (5 * f - 3) % 8;
                        f = f % 3 ? 0 : 255 & z.indexOf(x.charAt(g - 2)) << (3 == f ? 6 : 7);
                        C[F >>> 2] |= (m | u | f) << 24 - F % 4 * 8;
                        F++
                    }
                }
                return y.create(C, F)
            },
            _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"
        }
    }
)();
(function(v, y, x) {
        "undefined" != typeof module && module.exports ? module.exports = x() : y.JDDMAC = x()
    }
)(0, this, function() {
    var v = function() {
        return "00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F 63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC 51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E 7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D 806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA 11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F 30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D".split(" ").map(function(x) {
            return parseInt(x, 16)
        })
    }()
        , y = function() {};
    return y.prototype = {
        mac: function(x) {
            for (var A = -1, z = 0, C = x.length; z < C; z++)
                A = A >>> 8 ^ v[255 & (A ^ x.charCodeAt(z))];
            return (-1 ^ A) >>> 0
        }
    },
        y
});
var _CurrentPageProtocol = "https:" == document.location.protocol ? "https://" : "http://"
    , _JdJrTdRiskDomainName = window.__fp_domain || "gia.jd.com"
    , _url_query_str = ""
    , _root_domain = ""
    , _CurrentPageUrl = function() {
        var v = document.location.href.toString();
        try {
            _root_domain = /^https?:\/\/(?:\w+\.)*?(\w*\.(?:com\.cn|cn|com|net|id))[\\\/]*/.exec(v)[1]
        } catch (x) {}
        var y = v.indexOf("?");
        0 < y && (500 < (_url_query_str = v.substring(y + 1)).length && (_url_query_str = _url_query_str.substring(0, 499)),
            v = v.substring(0, y));
        return v.substring(_CurrentPageProtocol.length)
    }()
    , jd_shadow__ = function() {
        try {
            var v = JDDSecCryptoJS
                , y = [];
            y.push(_CurrentPageUrl);
            var x = v.lib.UUID.generateUuid();
            y.push(x);
            var A = (new Date).getTime();
            y.push(A);
            var z = v.SHA1(y.join("")).toString().toUpperCase();
            y = [];
            y.push("JD3");
            y.push(z);
            var C = (new JDDMAC).mac(y.join(""));
            y.push(C);
            var F = v.enc.Hex.parse("30313233343536373839616263646566")
                , g = v.enc.Hex.parse("4c5751554935255042304e6458323365")
                , f = y.join("");
            return v.AES.encrypt(v.enc.Utf8.parse(f), g, {
                mode: v.mode.CBC,
                padding: v.pad.Pkcs7,
                iv: F
            }).ciphertext.toString(v.enc.Base32)
        } catch (m) {}
    }()
    , td_collect = new function() {
        function v() {
            var g = window.webkitRTCPeerConnection || window.mozRTCPeerConnection || window.RTCPeerConnection;
            if (g) {
                var f = function(k) {
                    var e = /([0-9]{1,3}(\.[0-9]{1,3}){3})/
                        , h = /\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*/;
                    try {
                        var r = e.exec(k);
                        null != r && 0 != r.length && void 0 != r || (r = h.exec(k));
                        var l = r[1];
                        void 0 === m[l] && z.push(l);
                        m[l] = !0
                    } catch (w) {}
                }
                    , m = {};
                try {
                    var u = new g({
                        iceServers: [{
                            url: "stun:stun.services.mozilla.com"
                        }]
                    })
                } catch (k) {}
                try {
                    void 0 === u && (u = new g({
                        iceServers: []
                    }))
                } catch (k) {}
                if (u || window.mozRTCPeerConnection)
                    try {
                        u.createDataChannel("chat", {
                            reliable: !1
                        })
                    } catch (k) {}
                u && (u.onicecandidate = function(k) {
                    k.candidate && f(k.candidate.candidate)
                }
                    ,
                    u.createOffer(function(k) {
                        u.setLocalDescription(k, function() {}, function() {})
                    }, function() {}),
                    setTimeout(function() {
                        try {
                            u.localDescription.sdp.split("\n").forEach(function(k) {
                                0 === k.indexOf("a=candidate:") && f(k)
                            })
                        } catch (k) {}
                    }, 800))
            }
        }
        function y(g) {
            var f;
            return (f = document.cookie.match(new RegExp("(^| )" + g + "=([^;]*)(;|$)"))) ? f[2] : ""
        }
        function x() {
            function g(e) {
                var h = {};
                return u.style.fontFamily = e,
                    document.body.appendChild(u),
                    h.height = u.offsetHeight,
                    h.width = u.offsetWidth,
                    document.body.removeChild(u),
                    h
            }
            var f = ["monospace", "sans-serif", "serif"]
                , m = []
                , u = document.createElement("span");
            u.style.fontSize = "72px";
            u.style.visibility = "hidden";
            u.innerHTML = "mmmmmmmmmmlli";
            for (var k = 0; k < f.length; k++)
                m[k] = g(f[k]);
            this.checkSupportFont = function(e) {
                for (var h = 0; h < m.length; h++) {
                    var r = g(e + "," + f[h])
                        , l = m[h];
                    if (r.height !== l.height || r.width !== l.width)
                        return !0
                }
                return !1
            }
        }
        function A(g) {
            var f = {};
            f.name = g.name;
            f.filename = g.filename.toLowerCase();
            f.description = g.description;
            void 0 !== g.version && (f.version = g.version);
            f.mimeTypes = [];
            for (var m = 0; m < g.length; m++) {
                var u = g[m]
                    , k = {};
                k.description = u.description;
                k.suffixes = u.suffixes;
                k.type = u.type;
                f.mimeTypes.push(k)
            }
            return f
        }
        this.bizId = "";
        this.bioConfig = {
            type: "42",
            operation: 1,
            duraTime: 2,
            interval: 50
        };
        this.worder = null;
        this.deviceInfo = {
            userAgent: "",
            isJdApp: !1,
            isJrApp: !1,
            sdkToken: "",
            fp: "",
            eid: ""
        };
        this.isRpTok = !1;
        this.obtainLocal = function(g) {
            g = !(void 0 === g || !g);
            var f = {};
            try {
                var m = document.cookie.replace(/(?:(?:^|.*;\s*)3AB9D23F7A4B3C9B\s*=\s*([^;]*).*$)|^.*$/, "$1");
                0 !== m.length && (f.cookie = m)
            } catch (k) {}
            try {
                window.localStorage && null !== window.localStorage && 0 !== window.localStorage.length && (f.localStorage = window.localStorage.getItem("3AB9D23F7A4B3C9B"))
            } catch (k) {}
            try {
                window.sessionStorage && null !== window.sessionStorage && (f.sessionStorage = window.sessionStorage["3AB9D23F7A4B3C9B"])
            } catch (k) {}
            try {
                p.globalStorage && (f.globalStorage = window.globalStorage[".localdomain"]["3AB9D23F7A4B3C9B"])
            } catch (k) {}
            try {
                d && "function" == typeof d.load && "function" == typeof d.getAttribute && (d.load("jdgia_user_data"),
                    f.userData = d.getAttribute("3AB9D23F7A4B3C9B"))
            } catch (k) {}
            try {
                E.indexedDbId && (f.indexedDb = E.indexedDbId)
            } catch (k) {}
            try {
                E.webDbId && (f.webDb = E.webDbId)
            } catch (k) {}
            try {
                for (var u in f)
                    if (32 < f[u].length) {
                        _JdEid = f[u];
                        g || (_eidFlag = !0);
                        break
                    }
            } catch (k) {}
            try {
                (void 0 === _JdEid || 0 >= _JdEid.length) && this.db("3AB9D23F7A4B3C9B"),
                (void 0 === _JdEid || 0 >= _JdEid.length) && (_JdEid = y("3AB9D23F7A4B3C9B")),
                (void 0 === _JdEid || 0 >= _JdEid.length) && (_eidFlag = !0)
            } catch (k) {}
            return _JdEid
        }
        ;
        var z = []
            , C = "Abadi MT Condensed Light;Adobe Fangsong Std;Adobe Hebrew;Adobe Ming Std;Agency FB;Arab;Arabic Typesetting;Arial Black;Batang;Bauhaus 93;Bell MT;Bitstream Vera Serif;Bodoni MT;Bookman Old Style;Braggadocio;Broadway;Calibri;Californian FB;Castellar;Casual;Centaur;Century Gothic;Chalkduster;Colonna MT;Copperplate Gothic Light;DejaVu LGC Sans Mono;Desdemona;DFKai-SB;Dotum;Engravers MT;Eras Bold ITC;Eurostile;FangSong;Forte;Franklin Gothic Heavy;French Script MT;Gabriola;Gigi;Gisha;Goudy Old Style;Gulim;GungSeo;Haettenschweiler;Harrington;Hiragino Sans GB;Impact;Informal Roman;KacstOne;Kino MT;Kozuka Gothic Pr6N;Lohit Gujarati;Loma;Lucida Bright;Lucida Fax;Magneto;Malgun Gothic;Matura MT Script Capitals;Menlo;MingLiU-ExtB;MoolBoran;MS PMincho;MS Reference Sans Serif;News Gothic MT;Niagara Solid;Nyala;Palace Script MT;Papyrus;Perpetua;Playbill;PMingLiU;Rachana;Rockwell;Sawasdee;Script MT Bold;Segoe Print;Showcard Gothic;SimHei;Snap ITC;TlwgMono;Tw Cen MT Condensed Extra Bold;Ubuntu;Umpush;Univers;Utopia;Vladimir Script;Wide Latin".split(";")
            , F = "4game;AdblockPlugin;AdobeExManCCDetect;AdobeExManDetect;Alawar NPAPI utils;Aliedit Plug-In;Alipay Security Control 3;AliSSOLogin plugin;AmazonMP3DownloaderPlugin;AOL Media Playback Plugin;AppUp;ArchiCAD;AVG SiteSafety plugin;Babylon ToolBar;Battlelog Game Launcher;BitCometAgent;Bitdefender QuickScan;BlueStacks Install Detector;CatalinaGroup Update;Citrix ICA Client;Citrix online plug-in;Citrix Receiver Plug-in;Coowon Update;DealPlyLive Update;Default Browser Helper;DivX Browser Plug-In;DivX Plus Web Player;DivX VOD Helper Plug-in;doubleTwist Web Plugin;Downloaders plugin;downloadUpdater;eMusicPlugin DLM6;ESN Launch Mozilla Plugin;ESN Sonar API;Exif Everywhere;Facebook Plugin;File Downloader Plug-in;FileLab plugin;FlyOrDie Games Plugin;Folx 3 Browser Plugin;FUZEShare;GDL Object Web Plug-in 16.00;GFACE Plugin;Ginger;Gnome Shell Integration;Google Earth Plugin;Google Earth Plug-in;Google Gears 0.5.33.0;Google Talk Effects Plugin;Google Update;Harmony Firefox Plugin;Harmony Plug-In;Heroes & Generals live;HPDetect;Html5 location provider;IE Tab plugin;iGetterScriptablePlugin;iMesh plugin;Kaspersky Password Manager;LastPass;LogMeIn Plugin 1.0.0.935;LogMeIn Plugin 1.0.0.961;Ma-Config.com plugin;Microsoft Office 2013;MinibarPlugin;Native Client;Nitro PDF Plug-In;Nokia Suite Enabler Plugin;Norton Identity Safe;npAPI Plugin;NPLastPass;NPPlayerShell;npTongbuAddin;NyxLauncher;Octoshape Streaming Services;Online Storage plug-in;Orbit Downloader;Pando Web Plugin;Parom.TV player plugin;PDF integrado do WebKit;PDF-XChange Viewer;PhotoCenterPlugin1.1.2.2;Picasa;PlayOn Plug-in;QQ2013 Firefox Plugin;QQDownload Plugin;QQMiniDL Plugin;QQMusic;RealDownloader Plugin;Roblox Launcher Plugin;RockMelt Update;Safer Update;SafeSearch;Scripting.Dictionary;SefClient Plugin;Shell.UIHelper;Silverlight Plug-In;Simple Pass;Skype Web Plugin;SumatraPDF Browser Plugin;Symantec PKI Client;Tencent FTN plug-in;Thunder DapCtrl NPAPI Plugin;TorchHelper;Unity Player;Uplay PC;VDownloader;Veetle TV Core;VLC Multimedia Plugin;Web Components;WebKit-integrierte PDF;WEBZEN Browser Extension;Wolfram Mathematica;WordCaptureX;WPI Detector 1.4;Yandex Media Plugin;Yandex PDF Viewer;YouTube Plug-in;zako".split(";");
        this.toJson = "object" == typeof JSON && JSON.stringify;
        this.init = function() {
            _fingerprint_step = 6;
            v();
            _fingerprint_step = 7;
            "function" != typeof this.toJson && (this.toJson = function(g) {
                    var f = typeof g;
                    if ("undefined" === f || null === g)
                        return "null";
                    if ("number" === f || "boolean" === f)
                        return g + "";
                    if ("object" === f && g && g.constructor === Array) {
                        f = [];
                        for (var m = 0; g.length > m; m++)
                            f.push(this.toJson(g[m]));
                        return "[" + f + "]"
                    }
                    if ("object" === f) {
                        f = [];
                        for (m in g)
                            g.hasOwnProperty(m) && f.push('"' + m + '":' + this.toJson(g[m]));
                        return "{" + f + "}"
                    }
                }
            );
            this.sdkCollectInit()
        }
        ;
        this.sdkCollectInit = function() {
            try {
                try {
                    bp_bizid && (this.bizId = bp_bizid)
                } catch (m) {
                    this.bizId = "jsDefault"
                }
                var g = navigator.userAgent.toLowerCase()
                    , f = !g.match(/(iphone|ipad|ipod)/i) && (-1 < g.indexOf("android") || -1 < g.indexOf("adr"));
                this.deviceInfo.isJdApp = -1 < g.indexOf("jdapp");
                this.deviceInfo.isJrApp = -1 < g.indexOf("jdjr");
                this.deviceInfo.userAgent = navigator.userAgent;
                this.deviceInfo.isAndroid = f;
                this.createWorker()
            } catch (m) {}
        }
        ;
        this.db = function(g, f) {
            try {
                if (_fingerprint_step = "m",
                    window.openDatabase) {
                    var m = window.openDatabase("sqlite_jdtdstorage", "", "jdtdstorage", 1048576);
                    void 0 !== f && "" != f ? m.transaction(function(u) {
                        u.executeSql("CREATE TABLE IF NOT EXISTS cache(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, value TEXT NOT NULL, UNIQUE (name))", [], function(k, e) {}, function(k, e) {});
                        u.executeSql("INSERT OR REPLACE INTO cache(name, value) VALUES(?, ?)", [g, f], function(k, e) {}, function(k, e) {})
                    }) : m.transaction(function(u) {
                        u.executeSql("SELECT value FROM cache WHERE name=?", [g], function(k, e) {
                            1 <= e.rows.length && (_JdEid = e.rows.item(0).value)
                        }, function(k, e) {})
                    })
                }
                _fingerprint_step = "n"
            } catch (u) {}
        }
        ;
        this.setCookie = function(g, f) {
            void 0 !== f && "" != f && (document.cookie = g + "=; expires=Mon, 20 Sep 2010 00:00:00 UTC; path=/; domain=" + _root_domain,
                document.cookie = g + "=" + f + "; expires=Tue, 31 Dec 2030 00:00:00 UTC; path=/; domain=" + _root_domain)
        }
        ;
        this.tdencrypt = function(g) {
            g = this.toJson(g);
            g = encodeURIComponent(g);
            var f, m = "", u, k = 0;
            do {
                var e = (f = g.charCodeAt(k++)) >> 2;
                var h = (3 & f) << 4 | (f = g.charCodeAt(k++)) >> 4;
                var r = (15 & f) << 2 | (u = g.charCodeAt(k++)) >> 6;
                var l = 63 & u;
                isNaN(f) ? r = l = 64 : isNaN(u) && (l = 64);
                m = m + "23IL<N01c7KvwZO56RSTAfghiFyzWJqVabGH4PQdopUrsCuX*xeBjkltDEmn89.-".charAt(e) + "23IL<N01c7KvwZO56RSTAfghiFyzWJqVabGH4PQdopUrsCuX*xeBjkltDEmn89.-".charAt(h) + "23IL<N01c7KvwZO56RSTAfghiFyzWJqVabGH4PQdopUrsCuX*xeBjkltDEmn89.-".charAt(r) + "23IL<N01c7KvwZO56RSTAfghiFyzWJqVabGH4PQdopUrsCuX*xeBjkltDEmn89.-".charAt(l)
            } while (k < g.length);
            return m + "/"
        }
        ;
        this.collect = function() {
            var g = new Date;
            try {
                var f = document.createElement("div")
                    , m = {}
                    , u = "ActiveBorder ActiveCaption AppWorkspace Background ButtonFace ButtonHighlight ButtonShadow ButtonText CaptionText GrayText Highlight HighlightText InactiveBorder InactiveCaption InactiveCaptionText InfoBackground InfoText Menu MenuText Scrollbar ThreeDDarkShadow ThreeDFace ThreeDHighlight ThreeDLightShadow ThreeDShadow Window WindowFrame WindowText".split(" ");
                if (window.getComputedStyle)
                    for (l = 0; l < u.length; l++)
                        document.body.appendChild(f),
                            f.style.color = u[l],
                            m[u[l]] = window.getComputedStyle(f).getPropertyValue("color"),
                            document.body.removeChild(f)
            } catch (G) {}
            f = {
                ca: {},
                ts: {},
                m: {}
            };
            u = f.ca;
            u.tdHash = _jdfp_canvas_md5;
            var k = !1;
            if (l = window.WebGLRenderingContext) {
                var e = navigator.userAgent;
                l = !((0 < (e = e.toLowerCase()).indexOf("jdjr-app") || 0 <= e.indexOf("jdapp")) && (0 < e.indexOf("iphone") || 0 < e.indexOf("ipad")))
            }
            if (l) {
                var h;
                e = ["webgl", "experimental-webgl", "moz-webgl", "webkit-3d"];
                for (var r = [], l = 0; l < e.length; l++)
                    try {
                        var w = !1;
                        (w = document.createElement("canvas").getContext(e[l], {
                            stencil: !0
                        })) && w && (h = w,
                            r.push(e[l]))
                    } catch (G) {}
                r.length && (k = {
                    name: r,
                    gl: h
                })
            }
            if (k) {
                l = k.gl;
                u.contextName = k.name.join();
                u.webglversion = l.getParameter(l.VERSION);
                u.shadingLV = l.getParameter(l.SHADING_LANGUAGE_VERSION);
                u.vendor = l.getParameter(l.VENDOR);
                u.renderer = l.getParameter(l.RENDERER);
                h = [];
                try {
                    h = l.getSupportedExtensions(),
                        u.extensions = h
                } catch (G) {}
                try {
                    var b = l.getExtension("WEBGL_debug_renderer_info");
                    b && (u.wuv = l.getParameter(b.UNMASKED_VENDOR_WEBGL),
                        u.wur = l.getParameter(b.UNMASKED_RENDERER_WEBGL))
                } catch (G) {}
            }
            f.m.documentMode = document.documentMode;
            f.m.compatMode = document.compatMode;
            b = [];
            u = new x;
            for (l = 0; l < C.length; l++)
                h = C[l],
                u.checkSupportFont(h) && b.push(h);
            f.fo = b;
            l = {};
            b = [];
            for (var a in navigator)
                "object" != typeof navigator[a] && (l[a] = navigator[a]),
                    b.push(a);
            l.enumerationOrder = b;
            l.javaEnabled = navigator.javaEnabled();
            try {
                l.taintEnabled = navigator.taintEnabled()
            } catch (G) {}
            f.n = l;
            var c, t;
            l = navigator.userAgent.toLowerCase();
            (t = l.match(/rv:([\d.]+)\) like gecko/)) && (c = t[1]);
            (t = l.match(/msie ([\d.]+)/)) && (c = t[1]);
            t = [];
            if (c)
                for (c = "AcroPDF.PDF;Adodb.Stream;AgControl.AgControl;DevalVRXCtrl.DevalVRXCtrl.1;MacromediaFlashPaper.MacromediaFlashPaper;Msxml2.DOMDocument;Msxml2.XMLHTTP;PDF.PdfCtrl;QuickTime.QuickTime;QuickTimeCheckObject.QuickTimeCheck.1;RealPlayer;RealPlayer.RealPlayer(tm) ActiveX Control (32-bit);RealVideo.RealVideo(tm) ActiveX Control (32-bit);rmocx.RealPlayer G2 Control;Scripting.Dictionary;Shell.UIHelper;ShockwaveFlash.ShockwaveFlash;SWCtl.SWCtl;TDCCtl.TDCCtl;WMPlayer.OCX".split(";"),
                         l = 0; l < c.length; l++) {
                    var n = c[l];
                    try {
                        var q = new ActiveXObject(n);
                        (B = {}).name = n;
                        try {
                            B.version = q.GetVariable("$version")
                        } catch (G) {}
                        try {
                            B.version = q.GetVersions()
                        } catch (G) {}
                        B.version && 0 < B.version.length || (B.version = "");
                        t.push(B)
                    } catch (G) {}
                }
            else {
                c = navigator.plugins;
                var B = {};
                for (l = 0; l < c.length; l++)
                    B[(n = c[l]).name] = 1,
                        t.push(A(n));
                for (l = 0; l < F.length; l++)
                    q = F[l],
                    B[q] || (n = c[q]) && t.push(A(n))
            }
            q = "availHeight availWidth colorDepth bufferDepth deviceXDPI deviceYDPI height width logicalXDPI logicalYDPI pixelDepth updateInterval".split(" ");
            n = {};
            for (l = 0; q.length > l; l++)
                B = q[l],
                void 0 !== screen[B] && (n[B] = screen[B]);
            q = ["devicePixelRatio", "screenTop", "screenLeft"];
            c = {};
            for (l = 0; q.length > l; l++)
                B = q[l],
                void 0 !== window[B] && (c[B] = window[B]);
            f.p = t;
            f.w = c;
            f.s = n;
            f.sc = m;
            f.tz = g.getTimezoneOffset();
            f.lil = z.sort().join("|");
            f.wil = "";
            m = {};
            try {
                m.cookie = navigator.cookieEnabled,
                    m.localStorage = !!window.localStorage,
                    m.sessionStorage = !!window.sessionStorage,
                    m.globalStorage = !!window.globalStorage,
                    m.indexedDB = !!window.indexedDB
            } catch (G) {}
            return f.ss = m,
                f.ts.deviceTime = g.getTime(),
                f.ts.deviceEndTime = (new Date).getTime(),
                this.tdencrypt(f)
        }
        ;
        this.collectSdk = function(g) {
            try {
                var f = this
                    , m = !1
                    , u = f.getLocal("BATQW722QTLYVCRD");
                if (null != u && void 0 != u && "" != u)
                    try {
                        var k = JSON.parse(u)
                            , e = (new Date).getTime();
                        null != k && void 0 != k.t && "number" == typeof k.t && (12E5 >= e - k.t && void 0 != k.tk && null != k.tk && "" != k.tk && k.tk.startsWith("jdd") ? (f.deviceInfo.sdkToken = k.tk,
                            m = !0) : void 0 != k.tk && null != k.tk && "" != k.tk && (f.deviceInfo.sdkToken = k.tk))
                    } catch (h) {}
                f.deviceInfo.isJdApp ? (f.deviceInfo.clientVersion = navigator.userAgent.split(";")[2],
                0 < f.compareVersion(f.deviceInfo.clientVersion, "7.0.2") && !m && f.getJdSdkCacheToken(function(h) {
                    f.deviceInfo.sdkToken = h;
                    null != h && "" != h && h.startsWith("jdd") || f.getJdBioToken(g)
                }),
                "function" == typeof g && g(f.deviceInfo)) : f.deviceInfo.isJrApp ? (f.deviceInfo.clientVersion = navigator.userAgent.match(/clientVersion=([^&]*)(&|$)/)[1],
                0 < f.compareVersion(f.deviceInfo.clientVersion, "4.6.0") && !m && f.getJdJrSdkCacheToken(function(h) {
                    f.deviceInfo.sdkToken = h;
                    null != h && "" != h && h.startsWith("jdd") || f.getJdJrBioToken(g)
                }),
                "function" == typeof g && g(f.deviceInfo)) : "function" == typeof g && g(f.deviceInfo)
            } catch (h) {}
        }
        ;
        this.compareVersion = function(g, f) {
            try {
                if (g === f)
                    return 0;
                var m = g.split(".");
                var u = f.split(".");
                for (g = 0; g < m.length; g++) {
                    var k = parseInt(m[g]);
                    if (!u[g])
                        return 1;
                    var e = parseInt(u[g]);
                    if (k < e)
                        break;
                    if (k > e)
                        return 1
                }
            } catch (h) {}
            return -1
        }
        ;
        this.isWKWebView = function() {
            return !(!this.deviceInfo.userAgent.match(/supportJDSHWK/i) && 1 != window._is_jdsh_wkwebview)
        }
        ;
        this.getErrorToken = function(g) {
            try {
                if (g) {
                    var f = (g + "").match(/"token":"(.*?)"/);
                    if (f && 1 < f.length)
                        return f[1]
                }
            } catch (m) {}
            return ""
        }
        ;
        this.getJdJrBioToken = function(g) {
            var f = this;
            if ("undefined" != typeof JrBridge && null != JrBridge && void 0 !== JrBridge._version) {
                if (0 > f.compareVersion(JrBridge._version, "2.0.0"))
                    return void console.error("\u6865\u7248\u672c\u4f4e\u4e8e2.0\u4e0d\u652f\u6301bio");
                JrBridge.callNative({
                    type: f.bioConfig.type,
                    operation: f.bioConfig.operation,
                    biometricData: {
                        bizId: f.bizId,
                        duraTime: f.bioConfig.duraTime,
                        interval: f.bioConfig.interval
                    }
                }, function(m) {
                    try {
                        "object" != typeof m && (m = JSON.parse(m)),
                            f.deviceInfo.sdkToken = m.token
                    } catch (u) {
                        console.error(u)
                    }
                    null != f.deviceInfo.sdkToken && "" != f.deviceInfo.sdkToken && (m = {
                        tk: f.deviceInfo.sdkToken,
                        t: (new Date).getTime()
                    },
                        f.store("BATQW722QTLYVCRD", JSON.stringify(m)))
                })
            }
        }
        ;
        this.getJdJrSdkCacheToken = function(g) {
            var f = this;
            try {
                "undefined" == typeof JrBridge || null == JrBridge || void 0 === JrBridge._version || 0 > f.compareVersion(JrBridge._version, "2.0.0") || JrBridge.callNative({
                    type: f.bioConfig.type,
                    operation: 5,
                    biometricData: {
                        bizId: f.bizId,
                        duraTime: f.bioConfig.duraTime,
                        interval: f.bioConfig.interval
                    }
                }, function(m) {
                    var u = "";
                    try {
                        "object" != typeof m && (m = JSON.parse(m)),
                            u = m.token
                    } catch (k) {
                        console.error(k)
                    }
                    null != u && "" != u && "function" == typeof g && (g(u),
                        u.startsWith("jdd")) && (m = {
                        tk: u,
                        t: (new Date).getTime()
                    },
                        f.store("BATQW722QTLYVCRD", JSON.stringify(m)))
                })
            } catch (m) {}
        }
        ;
        this.getJdBioToken = function(g) {
            var f = this;
            g = JSON.stringify({
                businessType: "bridgeBiologicalProbe",
                callBackName: "_bioDeviceCb",
                params: {
                    pin: "",
                    jsonData: {
                        type: f.bioConfig.type,
                        operation: f.bioConfig.operation,
                        data: {
                            bizId: f.bizId,
                            duraTime: f.bioConfig.duraTime,
                            interval: f.bioConfig.interval
                        },
                        biometricData: {
                            bizId: f.bizId,
                            duraTime: f.bioConfig.duraTime,
                            interval: f.bioConfig.interval
                        }
                    }
                }
            });
            f.isWKWebView() ? window.webkit.messageHandlers.JDAppUnite.postMessage({
                method: "notifyMessageToNative",
                params: g
            }) : window.JDAppUnite && window.JDAppUnite.notifyMessageToNative(g);
            window._bioDeviceCb = function(m) {
                try {
                    var u = "object" == typeof m ? m : JSON.parse(m);
                    if (void 0 != u && null != u && "0" != u.status)
                        return;
                    null != u.data.token && void 0 != u.data.token && "" != u.data.token && (f.deviceInfo.sdkToken = u.data.token)
                } catch (k) {
                    m = f.getErrorToken(m),
                    null != m && "" != m && (f.deviceInfo.sdkToken = m)
                }
                null != f.deviceInfo.sdkToken && "" != f.deviceInfo.sdkToken && (m = {
                    tk: f.deviceInfo.sdkToken,
                    t: (new Date).getTime()
                },
                    f.store("BATQW722QTLYVCRD", JSON.stringify(m)))
            }
        }
        ;
        this.getJdSdkCacheToken = function(g) {
            try {
                var f = this
                    , m = JSON.stringify({
                    businessType: "bridgeBiologicalProbe",
                    callBackName: "_bioDeviceSdkCacheCb",
                    params: {
                        pin: "",
                        jsonData: {
                            type: f.bioConfig.type,
                            operation: 5,
                            data: {
                                bizId: f.bizId,
                                duraTime: f.bioConfig.duraTime,
                                interval: f.bioConfig.interval
                            },
                            biometricData: {
                                bizId: f.bizId,
                                duraTime: f.bioConfig.duraTime,
                                interval: f.bioConfig.interval
                            }
                        }
                    }
                });
                f.isWKWebView() ? window.webkit.messageHandlers.JDAppUnite.postMessage({
                    method: "notifyMessageToNative",
                    params: m
                }) : window.JDAppUnite && window.JDAppUnite.notifyMessageToNative(m);
                window._bioDeviceSdkCacheCb = function(u) {
                    var k = "";
                    try {
                        var e = "object" == typeof u ? u : JSON.parse(u);
                        if (void 0 != e && null != e && "0" != e.status)
                            return;
                        k = e.data.token
                    } catch (h) {
                        k = f.getErrorToken(u)
                    }
                    null != k && "" != k && "function" == typeof g && (g(k),
                        k.startsWith("jdd")) && (u = {
                        tk: k,
                        t: (new Date).getTime()
                    },
                        f.store("BATQW722QTLYVCRD", JSON.stringify(u)))
                }
            } catch (u) {}
        }
        ;
        this.store = function(g, f) {
            try {
                this.setCookie(g, f)
            } catch (m) {}
            try {
                window.localStorage && window.localStorage.setItem(g, f)
            } catch (m) {}
            try {
                window.sessionStorage && window.sessionStorage.setItem(g, f)
            } catch (m) {}
            try {
                window.globalStorage && window.globalStorage[".localdomain"].setItem(g, f)
            } catch (m) {}
            try {
                this.db(g, _JdEid)
            } catch (m) {}
        }
        ;
        this.getLocal = function(g) {
            var f = {}
                , m = null;
            try {
                var u = document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)" + g + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1");
                0 !== u.length && (f.cookie = u)
            } catch (e) {}
            try {
                window.localStorage && null !== window.localStorage && 0 !== window.localStorage.length && (f.localStorage = window.localStorage.getItem(g))
            } catch (e) {}
            try {
                window.sessionStorage && null !== window.sessionStorage && (f.sessionStorage = window.sessionStorage[g])
            } catch (e) {}
            try {
                p.globalStorage && (f.globalStorage = window.globalStorage[".localdomain"][g])
            } catch (e) {}
            try {
                d && "function" == typeof d.load && "function" == typeof d.getAttribute && (d.load("jdgia_user_data"),
                    f.userData = d.getAttribute(g))
            } catch (e) {}
            try {
                E.indexedDbId && (f.indexedDb = E.indexedDbId)
            } catch (e) {}
            try {
                E.webDbId && (f.webDb = E.webDbId)
            } catch (e) {}
            try {
                for (var k in f)
                    if (32 < f[k].length) {
                        m = f[k];
                        break
                    }
            } catch (e) {}
            try {
                (null == m || void 0 === m || 0 >= m.length) && (m = y(g))
            } catch (e) {}
            return m
        }
        ;
        this.createWorker = function() {
            if (window.Worker) {
                try {
                    var g = new Blob(["onmessage = function (event) {\n    var data = JSON.parse(event.data);\n    try {\n        var httpRequest;\n        try {\n            httpRequest = new XMLHttpRequest();\n        } catch (h) {}\n        if (!httpRequest)\n            try {\n                httpRequest = new (window['ActiveXObject'])('Microsoft.XMLHTTP')\n            } catch (l) {}\n        if (!httpRequest)\n            try {\n                httpRequest = new (window['ActiveXObject'])('Msxml2.XMLHTTP')\n            } catch (r) {}\n        if (!httpRequest)\n            try {\n                httpRequest = new (window['ActiveXObject'])('Msxml3.XMLHTTP')\n            } catch (n) {}\n\n        if(data){\n            httpRequest['open']('POST', data.url, false);\n            httpRequest['setRequestHeader']('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');\n            httpRequest['onreadystatechange'] = function () {\n                if (4 === httpRequest['readyState'] && 200 === httpRequest['status']) {\n                    postMessage(httpRequest.responseText);\n                }\n            };\n            httpRequest['send'](data.data);\n        }\n\n    }catch (e){console.error(e);}\n};"],{
                        type: "application/javascript"
                    })
                } catch (f) {
                    window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder,
                        (g = new BlobBuilder).append("onmessage = function (event) {\n    var data = JSON.parse(event.data);\n    try {\n        var httpRequest;\n        try {\n            httpRequest = new XMLHttpRequest();\n        } catch (h) {}\n        if (!httpRequest)\n            try {\n                httpRequest = new (window['ActiveXObject'])('Microsoft.XMLHTTP')\n            } catch (l) {}\n        if (!httpRequest)\n            try {\n                httpRequest = new (window['ActiveXObject'])('Msxml2.XMLHTTP')\n            } catch (r) {}\n        if (!httpRequest)\n            try {\n                httpRequest = new (window['ActiveXObject'])('Msxml3.XMLHTTP')\n            } catch (n) {}\n\n        if(data){\n            httpRequest['open']('POST', data.url, false);\n            httpRequest['setRequestHeader']('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');\n            httpRequest['onreadystatechange'] = function () {\n                if (4 === httpRequest['readyState'] && 200 === httpRequest['status']) {\n                    postMessage(httpRequest.responseText);\n                }\n            };\n            httpRequest['send'](data.data);\n        }\n\n    }catch (e){console.error(e);}\n};"),
                        g = g.getBlob()
                }
                try {
                    this.worker = new Worker(URL.createObjectURL(g))
                } catch (f) {}
            }
        }
        ;
        this.reportWorker = function(g, f, m, u) {
            try {
                null != this.worker && (this.worker.postMessage(JSON.stringify({
                        url: g,
                        data: f,
                        success: !1,
                        async: !1
                    })),
                        this.worker.onmessage = function(k) {}
                )
            } catch (k) {}
        }
    }
;
!function() {
    (new JdJrTdRiskFinger).get(function(v) {
        risk_jd_local_fingerprint = v;
        (0 >= _JdEid.length || !_eidFlag) && 0 >= (_JdEid = td_collect.obtainLocal()).length && (_eidFlag = !0)
    });
    _fingerprint_step = 5;
    td_collect.init();
    try {
        td_collect_exe()
    } catch (v) {}
}();
